package club.adger.server.service.impl;

import club.adger.server.dto.CourseDto;
import club.adger.server.dto.PageDto;
import club.adger.server.entity.Course;
import club.adger.server.entity.CourseExample;
import club.adger.server.mapper.CourseMapper;
import club.adger.server.service.CourseService;
import club.adger.server.utils.CopyUtil;
import club.adger.server.utils.UuidUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: Adger
 * @Date: 2020/07/25/5:23
 */
@Service
public class CourseServiceImpl implements CourseService {
    @Resource
    private CourseMapper courseMapper;

    /**
     * PageDto 是分页数据传输的 实体类对象
     * @param pageDto
     * @return
     */
    public void list(PageDto pageDto){
        PageHelper.startPage(pageDto.getPage(),pageDto.getSize());
        List<Course> coursesList = courseMapper.selectByExample(null);
        CourseExample courseExample = new CourseExample();
        courseExample.setOrderByClause("sort asc");
        PageInfo<Course> coursePageInfo = new PageInfo<>(coursesList);
        pageDto.setTotal(coursePageInfo.getTotal());
        List<CourseDto> courseDtoList = CopyUtil.copyList(coursesList, CourseDto.class);
        pageDto.setList(courseDtoList);
    }

    /**
     * 这是新增或者修改的方法 下面 private 这里是公开的方法 调用就这个方法 不管内部怎么实现的
     * @param courseDto
     */
    public void add(CourseDto courseDto){
        Course course = CopyUtil.copy(courseDto, Course.class);
        if(StringUtils.isEmpty(courseDto.getId())){
            this.insert(course);
        }else{
            this.update(course);
        }
    }

    /**
     * 这里都是private
     * 这是添加的方法
     * @param course
     */
    private void insert(Course course){
    Date now = new Date();
            course.setCreatedAt(now);
            course.setUpdatedAt(now);
        course.setId(UuidUtil.getShortUuid());
        courseMapper.insert(course);
    }

    /**
     * 这里也是private 这是修改的方法
     * @param course
     */
    private void update(Course course){
            course.setUpdatedAt(new Date());
        courseMapper.updateByPrimaryKey(course);
    }

    /**
     * 删除
     * @param id
     */
    @Override
    public void delete(String id) {
        courseMapper.deleteByPrimaryKey(id);
    }
}
